//============================================================================================
/**
 * @file	bmp_menu.h
 * @brief	BMPメニュー処理
 * @author	Hiroyuki Nakamura
 * @date	2004.11.10
 */
//============================================================================================
#ifndef BMP_MENU_H
#define BMP_MENU_H

#include "bmp_menu_list.h"


#undef GLOBAL
#ifdef BMP_MENU_H_GLOBAL
#define GLOBAL	/*	*/
#else
#define GLOBAL	extern
#endif


//============================================================================================
//	シンボル定義
//============================================================================================
#define	BMPMENU_NULL	( 0xffffffff )
#define	BMPMENU_CANCEL	( 0xfffffffe )
#define	BMPMENU_DUMMY	( 0xfffffffd )


typedef struct {
	const BMPMENU_DATA * menu;
	GF_BGL_BMPWIN * win;
	u8	font;
	u8	x_max;			// 横方向項目最大数（必ず１以上）
	u8	y_max;			// 縦方向項目最大数（必ず１以上）
	u8	line_spc:4;		// 文字間隔Ｙ
	u8	c_disp_f:2;		// カーソル表示フラグ
	u8	loop_f:2;		// LOOPフラグ ( 0=OFF, 1=ON )
}BMPMENU_HEADER;

typedef struct _BMPMENU_WORK	BMPMENU_WORK;

// 外部コントロールパラメータ
enum {
	BMPMENU_CNTROL_DECIDE = 0,	// 決定
	BMPMENU_CNTROL_CANCEL,		// キャンセル
	BMPMENU_CNTROL_UP,			// 上
	BMPMENU_CNTROL_DOWN,		// 下
	BMPMENU_CNTROL_LEFT,		// 左
	BMPMENU_CNTROL_RIGHT,		// 右
};

// 移動方向
enum {
	BMPMENU_MOVE_NONE = 0,	// 動作なし
	BMPMENU_MOVE_UP,		// 上へ移動
	BMPMENU_MOVE_DOWN,		// 下へ移動
	BMPMENU_MOVE_LEFT,		// 左へ移動
	BMPMENU_MOVE_RIGHT,		// 右へ移動
};


//============================================================================================
//	グローバル変数
//============================================================================================


//============================================================================================
//	プロトタイプ宣言
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * BMPメニュー登録（スクリーン転送しない）
 *
 * @param	dat			ヘッダデータ
 * @param	px			項目表示X座標
 * @param	py			項目表示Y座標
 * @param	pos			初期カーソル位置
 * @aram	mode		メモリ取得モード
 * @param	cancel		キャンセルボタン
 *
 * @return	BMPメニューワーク
 *
 * @li	BMPリストワークはsys_AllocMemoryで確保
 */
//--------------------------------------------------------------------------------------------
GLOBAL BMPMENU_WORK * BmpMenuAdd_NoTrans(
						const BMPMENU_HEADER * dat,
						u8 px, u8 py, u8 pos, u8 mode, u32 cancel );

//--------------------------------------------------------------------------------------------
/**
 * BMPメニュー登録（キャンセルボタン指定）
 *
 * @param	dat			ヘッダデータ
 * @param	px			項目表示X座標
 * @param	py			項目表示Y座標
 * @param	pos			初期カーソル位置
 * @aram	mode		メモリ取得モード
 * @param	cancel		キャンセルボタン
 *
 * @return	BMPメニューワーク
 *
 * @li	BMPリストワークはsys_AllocMemoryで確保
 */
//--------------------------------------------------------------------------------------------
GLOBAL BMPMENU_WORK * BmpMenuAddEx(
						const BMPMENU_HEADER * dat,
						u8 px, u8 py, u8 pos, u8 mode, u32 cancel );

//--------------------------------------------------------------------------------------------
/**
 * BMPメニュー登録（簡易版）
 *
 * @param	dat			ヘッダデータ
 * @param	pos			初期カーソル位置
 * @aram	mode		メモリ取得モード
 *
 * @return	BMPメニューワーク
 *
 * @li	BMPリストワークはsys_AllocMemoryで確保
 * @li	Bボタンキャンセル
 */
//--------------------------------------------------------------------------------------------
GLOBAL BMPMENU_WORK * BmpMenuAdd( const BMPMENU_HEADER * dat, u8 pos, u8 mode );

//--------------------------------------------------------------------------------------------
/**
 * BMPメニュー破棄
 *
 * @param	mw		BMPメニューワーク
 * @param	backup	カーソル位置保存場所
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BmpMenuExit( BMPMENU_WORK * mw, u8 * backup );

//--------------------------------------------------------------------------------------------
/**
 * メニュー動作関数
 *
 * @param	mw		BMPメニューワーク
 *
 * @return	動作結果
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 BmpMenuMain( BMPMENU_WORK * mw );

//--------------------------------------------------------------------------------------------
/**
 * メニュー動作関数（十字キーのSEを指定できる）
 *
 * @param	mw		BMPメニューワーク
 * @param	key_se	十字キーのSE
 *
 * @return	動作結果
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 BmpMenuMain_SE( BMPMENU_WORK * mw, u16 key_se );

//--------------------------------------------------------------------------------------------
/**
 * メニュー外部コントロール
 *
 * @param	mw		BMPメニューワーク
 * @param	prm		コントロールパラメータ
 *
 * @return	動作結果
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 BmpMenuMainOutControl( BMPMENU_WORK * mw, u8 prm );

//--------------------------------------------------------------------------------------------
/**
 * カーソル位置取得
 *
 * @param	mw		BMPメニューワーク
 *
 * @return	カーソル位置
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 BmpMenuCursorPosGet( BMPMENU_WORK * mw );

//--------------------------------------------------------------------------------------------
/**
 * 移動方向取得
 *
 * @param	mw		BMPメニューワーク
 *
 * @return	移動方向取得
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 BmpMenuMoveSiteGet( BMPMENU_WORK * mw );

//============================================================================================
//	はい・いいえ処理
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえウィンドウセット（カーソル位置指定）
 *
 * @param	ini		BGLデータ
 * @param	data	ウィンドウデータ
 * @param	cgx		ウィンドウキャラ位置
 * @param	pal		ウィンドウパレット番号
 * @param	pos		初期カーソル位置
 * @param	heap	ヒープID
 *
 * @return	BMPメニューワーク
 *
 * @li	BMPウィンドウとBMPメニューワークをAllocで取得している
 */
//--------------------------------------------------------------------------------------------
GLOBAL BMPMENU_WORK * BmpYesNoSelectInitEx(
			GF_BGL_INI * ini, const BMPWIN_DAT * data, u16 cgx, u8 pal, u8 pos, u32 heap );

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえウィンドウセット
 *
 * @param	ini		BGLデータ
 * @param	data	ウィンドウデータ
 * @param	cgx		ウィンドウキャラ位置
 * @param	pal		ウィンドウパレット番号
 * @param	heap	ヒープID
 *
 * @return	BMPメニューワーク
 *
 * @li	BMPウィンドウとBMPメニューワークをAllocで取得している
 */
//--------------------------------------------------------------------------------------------
GLOBAL BMPMENU_WORK * BmpYesNoSelectInit(
					GF_BGL_INI * ini, const BMPWIN_DAT * data, u16 cgx, u8 pal, u32 heap );

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえ選択ウィンドウの制御
 *
 * @param	ini		BGLデータ
 * @param	heap	ヒープID
 *
 * @retval	"BMPMENU_NULL	選択されていない"
 * @retval	"0				はいを選択"
 * @retval	"BMPMENU_CANCEL	いいえorキャンセル"
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 BmpYesNoSelectMain( BMPMENU_WORK * mw, u32 heap );

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえ選択ウィンドウ外部コントロール
 *
 * @param	ini		BGLデータ
 * @param	prm		コントロールパラメータ
 * @param	heap	ヒープID
 *
 * @retval	"BMPMENU_NULL	選択されていない"
 * @retval	"0				はいを選択"
 * @retval	"BMPMENU_CANCEL	いいえorキャンセル"
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 BmpYesNoSelectMainOutControl( BMPMENU_WORK * mw, u8 prm, u32 heap );

//--------------------------------------------------------------------------------------------
/**
 * はい・いいえウィンドウ削除
 *
 * @param	ini		BGLデータ
 * @param	heap	ヒープID
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BmpYesNoWinDel( BMPMENU_WORK * mw, u32 heap );



//------------------------------------------------------------------
/**
 * ウィンドウにカーソル画像を描画する
 *
 * @param   win
 * @param   x
 * @param   y
 *
 */
//------------------------------------------------------------------
GLOBAL void BmpWin_DrawCursorImage(GF_BGL_BMPWIN* win, u32 x, u32 y);







#undef	GLOBAL
#endif	/* BMP_MENU_H */